package com.biao.java8.demo;

import com.biao.java8.demo.pojo.Employee;

import java.util.Optional;

public class TestOptional {
    /*
     * 一、Optional 容器类：用于尽量避免空指针异常
     * 	Optional.of(T t) : 创建一个 Optional 实例
     * 	Optional.empty() : 创建一个空的 Optional 实例
     * 	Optional.ofNullable(T t):若 t 不为 null,创建 Optional 实例,否则创建空实例
     * 	isPresent() : 判断是否包含值
     * 	orElse(T t) :  如果调用对象包含值，返回该值，否则返回t
     * 	orElseGet(Supplier s) :如果调用对象包含值，返回该值，否则返回 s 获取的值
     * 	map(Function f): 如果有值对其处理，并返回处理后的Optional，否则返回 Optional.empty()
     * 	flatMap(Function mapper):与 map 类似，要求返回值必须是Optional
     */
    public static void main(String[] args) {
        Optional<Employee> employeeOptional = Optional.of(new Employee());  // 如果给个null的值,这里就直接报错了
//        Optional<Employee> err = Optional.of(null);       // 直接报错
        System.out.println(employeeOptional.get());

        Optional<Employee> employeeOptional2 = Optional.empty();
//        System.out.println(employeeOptional2.get());    // 空的直接报错

        Optional<Employee> employeeOptional3 = Optional.ofNullable(null);
        if (employeeOptional3.isPresent()) {    // 是否不为空，不是null
            System.out.println(employeeOptional3.get());
        }
        // employeeOptional3 为null的话，走else 分支
        Employee e = employeeOptional3.orElse(new Employee("a", 18, 99.99));
        System.out.println(e);
    }
}
